require('module-alias/register')
var { sunnyUser, sunnyTenant, sunnyRole, sunnyDept, sunnyPost} = require('@Sequelize')
var { Op } = require("sequelize")

// 一对一 hasOne  用户表中一个roleID对应有角色表中一个id key重命名为roleInfo
// 一对一关联是由一个单一的外键，实现两个模型之间的精确关联。
// sunnyRole 做为源模型，而将sunnyUser做为目标模型
// 外键: sunnyUser.roleId
// 目标键: sunnyRole.id
sunnyRole.hasOne(sunnyUser, {
    foreignKey: 'roleId',
    targetKey: 'id',
    as: "roleInfo"
});
async function hasOne(req, res, next) {
    var data = await sunnyUser.findAll({
        include: [
            {
                model: sunnyRole,
                as: "roleInfo"
            }
        ]
    })
    res.send(JSON.stringify(data))
}


// 一对一 belongsTo 属于  sunnyUser模型中一个roleID对应有sunnyRole模型中一个id,roleInfo会将其做为目标模型的名称
// 一对一关联是由一个单一的外键，实现两个模型之间的精确关联。
// sunnyUser 做为源模型，sunnyRole而将做为目标模型
// 外键: sunnyUser.roleId
// 目标键: sunnyRole.id
sunnyUser.belongsTo(sunnyRole, {
    foreignKey: 'roleId',
    targetKey: 'id',
    as: "roleInfo"
});
sunnyUser.belongsTo(sunnyDept, {
    foreignKey: 'deptId',
    targetKey: 'id',
    as: "deptInfo"
});
async function belongsTo(req, res, next) {
    var data = await sunnyUser.findAll({
        include: [
            {
                model: sunnyDept,
                as: "deptInfo",
            },
            {
                model: sunnyRole,
                as: "roleInfo",
            }
        ]

    })
    res.send(JSON.stringify(data))
}


// 一对多 hasMany 有多个  sunnyDept模型中id对应有sunnyUser模型中多个id 一个部门有多个用户
// One-To-Many关联是指一个源模型连接多个目标模型。反之目标模型都会有一个明确的源。
// sunnyDept 做为源模型，sunnyUser而将做为目标模型
sunnyDept.hasMany(sunnyUser, { foreignKey: 'deptId', sourceKey: 'id' });
async function hasMany(req, res, next) {
    var data = await sunnyDept.findAll({
        include: {
            model: sunnyUser,
        }
    })
    res.send(JSON.stringify(data))
}

// 多对多 belongsToMany
async function belongsToMany(req, res, next) {
    var data = await sunnyUser.findAll({
        include: {
            model: sunnyRole,
            as: "roleInfo"
        }
    })
    res.send(JSON.stringify(data))
}

module.exports = { hasOne, belongsTo,belongsToMany, hasMany }; 